/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.si3.controlador;

import java.util.HashMap;
import java.util.Map;

import com.si3.modelo.Alumno;
import com.si3.modelo.Login;
import com.si3.modelo.Profesor;
import com.si3.modelo.Usuario;
import com.si3.servicio.UpdateProfileService;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.validation.BindException;
import org.springframework.validation.Errors;
import org.springframework.web.bind.ServletRequestDataBinder;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;


public class UpdateProfileController extends SimpleFormController
{
    private UpdateProfileService updateProfileService;

    public UpdateProfileService getUpdateProfileService()
    {
        return updateProfileService;
    }

    public void setUpdateProfileService(UpdateProfileService updateProfileService)
    {
        this.updateProfileService = updateProfileService;
    }
    
    
    public UpdateProfileController()
    {
        //Initialize controller properties here or 
        //in the Web Application Context
    	
         
        setCommandClass(Alumno.class);
        setCommandName("alumno");
           
        setSuccessView("showMessage");
        setFormView("showProfileInfo");
    }
 
    
    @Override
    protected void initBinder(HttpServletRequest request,
    ServletRequestDataBinder binder) throws Exception 
    {
        Login login = (Login) request.getSession().getAttribute("login");
        
        if (login.getUserType() == Usuario.TipoUsuario.ALUMNO)
        {
          binder.registerCustomEditor(com.si3.modelo.Centro.class, new CentroEditorSupport());
          System.out.println("\t*** registered Centro property editor.");
        }
        else if (login.getUserType() == Usuario.TipoUsuario.PROFESOR)
        {
          binder.registerCustomEditor(com.si3.modelo.Departamento.class, new DepartamentoEditorSupport());
          System.out.println("\t*** registered Deprtamento property editor.");
        }
    }

    protected Map referenceData(HttpServletRequest request, Object command, Errors errors) throws Exception 
    {
    	Map referenceData = new HashMap();
    	//verificar si la petición la realiza un alumno o un profesor
        Login login = (Login) request.getSession().getAttribute("login");
        
        if (login.getUserType() == Usuario.TipoUsuario.ALUMNO)
        {
            //mv = new ModelAndView("showProfileInfo");
            Alumno alumno = (Alumno)login.getUsuario();
            setCommandClass(Alumno.class);
            //mv.addObject("centros", updateProfileService.getAllCentros());
            setCommandName("alumno");
            referenceData.put("alumno", alumno);
            referenceData.put("tipo", "alumno");    	
    	    referenceData.put("centros", updateProfileService.getAllCentros());
        }
        else if (login.getUserType() == Usuario.TipoUsuario.PROFESOR)
        {
            //mv = new ModelAndView("showProfileInfo");
            Profesor profesor = (Profesor)login.getUsuario();
            setCommandClass(Profesor.class);
            setCommandName("profesor");
            //mv.addObject("centros", updateProfileService.getAllCentros());
        
            referenceData.put("profesor", profesor);
            referenceData.put("tipo", "profesor");    	
    	    referenceData.put("departamentos", updateProfileService.getAllDepartamentos());
        }
    	return referenceData;
      } 
  
    
    @Override
    protected ModelAndView onSubmit(HttpServletRequest request, 
                                    HttpServletResponse response, 
                                    Object command, 
                                    BindException errors) throws Exception 
    {
        ModelAndView mv=new ModelAndView(getSuccessView()); 
        
        Usuario user = (Usuario) command;
        System.out.println("[UpdateProfileController] usuario que llega: ");
        user.printInfo();
        //verificar si se trata de una actualización de perfil de alumno
        // o de profesor
        Login login = (Login) request.getSession().getAttribute("login");
       
        if (login.getUserType() == Usuario.TipoUsuario.ALUMNO)
        {
        	mv.setViewName("startalumno"); 
        	
        	updateProfileService.updateAlumno((Alumno)user);
            mv.addObject("message", "Perfil de Alumno correctamente actualizado");
            mv.addObject("tipo", "alumno");
        }
        else if (login.getUserType() == Usuario.TipoUsuario.PROFESOR)
        {
        	mv.setViewName("startprofesor"); 
            updateProfileService.updateProfesor((Profesor)user);
            mv.addObject("message", "Perfil de Profesor correctamente actualizado");
            mv.addObject("tipo", "profesor");
        }
        login.setUsuario(user);
        return mv;
    }
    
}
